// 用户模块控制器
// const rp = require('request-promsie')
// 引入数据库的操作
const userDao = require('../models/user')
// 引入验证规则
const { checkUserInfo, checkUserName } = require('../middleware/checkUserInfo')
module.exports = {
  // 用户登录
  Login: async (ctx) => {
    let { userName, password } = ctx.request.body
    // 校验用户信息是否符合规则
    if (!checkUserInfo(ctx, userName, password)) {
      return
    }
    // 连接数据库
    let users = await userDao.Login(userName, password)
    // 判断是否含有该用户
    if (users.length === 0) {
      ctx.body = {
        code: '004',
        msg: '用户名或密码错误'
      }
      return
    }
    // 长度为一代表有这个用户
    if (users.length === 1) {
      const loginUser = {
        user_id: users[0].user_id,
        userName: users[0].userName
      }
      // 保存用户信息到session
      ctx.session.user = loginUser
      ctx.body = {
        code: '001',
        user: loginUser,
        msg: '登录成功'
      }
      return
    }
    // 其余错误
    ctx.body = {
      code: '500',
      msg: '未知错误'
    }
  },
  // 查询
  FindUserName: async (ctx) => {
    let { userName } = ctx.request.body
    // 校验用户名是否符合规则
    if (!checkUserName(ctx, userName)) {
      return
    }
    // 连接数据库
    let users = await userDao.FindUserName(userName)
    // 可以注册
    if (users.length === 0) {
      ctx.body = {
        code: '001',
        msg: '用户名不存在，可以注册'
      }
      return
    }
    // 不可以注册
    if (users.length === 1) {
      ctx.body = {
        code: '004',
        msg: '用户名已经存在，不能注册'
      }
      return
    }
    // 其他错误
    ctx.body = {
      code: '500',
      msg: '未知错误'
    }
  },
  // 注册
  Register: async (ctx) => {
    let { userName, password } = ctx.request.body
    // 校验用户信息是否符合规则
    if (!checkUserInfo(ctx, userName, password)) {
      return
    }
    // 查询用户信息
    let users = await userDao.FindUserName(userName)
    if (users.length !== 0) {
      ctx.body = {
        code: '004',
        msg: '用户名已经存在，不能注册'
      }
      return
    }
    try {
      // 连接数据库插入用户信息
      let registerResult = await userDao.Register(userName, password)
      // 操作所影响的记录行数为1,则代表注册成功
      if (registerResult.affectedRows === 1) {
        ctx.body = {
          code: '001',
          msg: '注册成功'
        }
        return
      }
      // 否则失败
      ctx.body = {
        code: '500',
        msg: '未知错误，注册失败'
      }
    } catch (error) {
      reject(error)
    }
  }
}
